svm: Properly mask unsupported bits in CPUID_80000001_ECX.
authorKeir Fraser <keir.fraser@citrix.com>
Sat, 12 Jan 2008 09:29:38 +0000 (09:29 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Sat, 12 Jan 2008 09:29:38 +0000 (09:29 +0000)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/hvm/svm/svm.c

index cb4ebdd4d94493362a1861b764fd908847224045..15ade3025d13df618fe46f3b575ed57076aa7dda 100644 (file)
@@ -1009,6 +1009,12 @@ static void svm_vmexit_do_cpuid(struct vmcb_struct *vmcb,
         __clear_bit(X86_FEATURE_PSE36 & 31, &edx);
 
         /* Filter all other features according to a whitelist. */
+        ecx &= (bitmaskof(X86_FEATURE_LAHF_LM) |
+                bitmaskof(X86_FEATURE_ALTMOVCR) |
+                bitmaskof(X86_FEATURE_ABM) |
+                bitmaskof(X86_FEATURE_SSE4A) |
+                bitmaskof(X86_FEATURE_MISALIGNSSE) |
+                bitmaskof(X86_FEATURE_3DNOWPF));
         edx &= (0x0183f3ff | /* features shared with 0x00000001:EDX */
                 bitmaskof(X86_FEATURE_NX) |
                 bitmaskof(X86_FEATURE_LM) |